package co.edu.usbcali.banco.dataaccess.daoFactory;

import co.edu.usbcali.banco.dataaccess.dao.*;


/**
 * Factory for Data Access Objects Strategy The DAO pattern can be made highly flexible
 * by adopting the Abstract Factory [GoF] and the Factory Method [GoF] patterns.
 * When the underlying storage is not subject to change from one implementation to another,
 * this strategy can be implemented using the Factory Method pattern to produce a number of DAOs needed by the application.
 * This class is a Factory Method pattern
 *
 * @author Zathura Code Generator http://code.google.com/p/zathura
 */
public class XMLHibernateDaoFactory {
    private static XMLHibernateDaoFactory instance = null;

    private XMLHibernateDaoFactory() {
    }

    /**
    *
    * @return HibernateDaoFactory
    */
    public static XMLHibernateDaoFactory getInstance() {
        if (instance == null) {
            instance = new XMLHibernateDaoFactory();
        }

        return instance;
    }

    /**
    * This method instantiates the IBancoDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return IBancoDAO implementation
    */
    public IBancoDAO getBancoDAO() {
        return new BancoDAO();
    }

    /**
    * This method instantiates the ICiudadDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return ICiudadDAO implementation
    */
    public ICiudadDAO getCiudadDAO() {
        return new CiudadDAO();
    }

    /**
    * This method instantiates the IClienteDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return IClienteDAO implementation
    */
    public IClienteDAO getClienteDAO() {
        return new ClienteDAO();
    }

    /**
    * This method instantiates the IConsignacionDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return IConsignacionDAO implementation
    */
    public IConsignacionDAO getConsignacionDAO() {
        return new ConsignacionDAO();
    }

    /**
    * This method instantiates the ICuentaDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return ICuentaDAO implementation
    */
    public ICuentaDAO getCuentaDAO() {
        return new CuentaDAO();
    }

    /**
    * This method instantiates the IEstadoDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return IEstadoDAO implementation
    */
    public IEstadoDAO getEstadoDAO() {
        return new EstadoDAO();
    }

    /**
    * This method instantiates the IPaisDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return IPaisDAO implementation
    */
    public IPaisDAO getPaisDAO() {
        return new PaisDAO();
    }

    /**
    * This method instantiates the IRetiroDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return IRetiroDAO implementation
    */
    public IRetiroDAO getRetiroDAO() {
        return new RetiroDAO();
    }

    /**
    * This method instantiates the ISucursalDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return ISucursalDAO implementation
    */
    public ISucursalDAO getSucursalDAO() {
        return new SucursalDAO();
    }

    /**
    * This method instantiates the ITipoDocumentoDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return ITipoDocumentoDAO implementation
    */
    public ITipoDocumentoDAO getTipoDocumentoDAO() {
        return new TipoDocumentoDAO();
    }

    /**
    * This method instantiates the ITipoUsuarioDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return ITipoUsuarioDAO implementation
    */
    public ITipoUsuarioDAO getTipoUsuarioDAO() {
        return new TipoUsuarioDAO();
    }

    /**
    * This method instantiates the IUsuarioDAO class for HibernateCore
    * that is used in this applications deployment environment to access the data.
    * @return IUsuarioDAO implementation
    */
    public IUsuarioDAO getUsuarioDAO() {
        return new UsuarioDAO();
    }
}
